import { createApp } from 'vue';
import pinia from '@/stores';

import '@/styles/index.scss';

// element plus
import ElementPlus from 'element-plus';
// element css
import 'element-plus/dist/index.css';
// element dark css
import 'element-plus/theme-chalk/dark/css-vars.css';

// element icons
import * as Icons from '@element-plus/icons-vue';

// vue i18n
import I18n from '@/languages';

import App from '@/App.vue';
import router from '@/router';

// custom directives
import directives from '@/directives/index';

// errorHandler
import errorHandler from '@/utils/errorHandler';
// svg icons
import 'virtual:svg-icons-register';

// highlight 高亮
import 'highlight.js/styles/atom-one-dark.css';
import 'highlight.js/lib/common';
import hljsVuePlugin from '@highlightjs/vue-plugin';
import { isLocalEnv } from '@/utils';

// 引入打印插件
import { hiPrintPlugin } from 'vue-plugin-hiprint';
// 关闭打印客户端连接
hiPrintPlugin.disAutoConnect();

//引入表单拖拽设计器文件

import '@/views/toolbox/formdesigner/styles/index.styl';

//导入检测版本更新
import { createVersionPolling } from 'version-polling';
import { ElMessageBox } from 'element-plus';

//导入右击菜单样式
import '@imengyu/vue3-context-menu/lib/vue3-context-menu.css';

//导入vxe-table组件
import VxeUITable from 'vxe-table';
import 'vxe-table/lib/style.css';
//为了不在控制台报错显示vxe-table的警告信息，引入下面的文件
import { VxeUI, VxeTooltip } from 'vxe-pc-ui';
VxeUI.component(VxeTooltip);
createVersionPolling({
  vcType: 'versionJson',
  versionFileUrl: `${location.origin}/version.json`,
  pollingInterval: 10 * 60 * 1000,
  silent: process.env.NODE_ENV === 'development', // 开发环境下不检测
  onUpdate: self => {
    ElMessageBox.confirm(
      '尊敬的用户：系统已发布更新,请您尽快保存数据,以免刷新页面导致未保存的数据丢失, 是否刷新页面加载最新版本？',
      '系统提示',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        closeOnClickModal: false,
        closeOnPressEscape: false,
        showClose: false
      }
    )
      .then(() => {
        self.onRefresh();
      })
      .catch(() => {
        self.onCancel();
      });
  }
});

// 引入 FormCreate
// import formCreate from '@form-create/element-ui'; //本项目没有使用该组件进行开发，只是导入没有使用

const app = createApp(App);

if (!isLocalEnv()) {
  app.config.errorHandler = errorHandler;
}

// register the element Icons component
Object.keys(Icons).forEach(key => {
  app.component(key, Icons[key as keyof typeof Icons]);
});

app.use(ElementPlus);
app.use(pinia);
app.use(router);
app.use(directives);
app.use(I18n);

// app.use(router)
app.use(hljsVuePlugin);
// 注册打印插件
app.use(hiPrintPlugin);
// 注册vxe-table组件
app.use(VxeUITable);
// 挂载 FormCreate
//本项目没有使用该组件进行开发，只是导入没有使用，考虑到该组件用JSON配置无非js数据多和本质上html代码多一样没有区别，所以没有使用
// app.use(formCreate);

app.mount('#app');
